function [ ER ] = ER( E,nu,hauteur,longueur,champ,x_haut,x_gauche1,x_gauche2,...
    x_droite1,x_droite2,y_haut,y_gauche1,y_gauche2,y_droite1,y_droite2,...
    sigmaxx_haut,sigmaxx_bas,sigmaxx_gauche1,sigmaxx_gauche2,sigmaxx_droite1,...
    sigmaxx_droite2,sigmaxy_haut,sigmaxy_bas,sigmaxy_gauche1,sigmaxy_gauche2,...
    sigmaxy_droite1,sigmaxy_droite2,sigmayy_haut,sigmayy_bas,sigmayy_gauche1,...
    sigmayy_gauche2,sigmayy_droite1,sigmayy_droite2)

% materiau contient les caractéristiques du matériau
% geometrie contient les longueur longueur et hauteur
% champ est une chaîne de caractères : 'x'. 'y', ou 'xy'

% calcul=donnees.calcul;
% geometrie=donnees.geom;
% materiau=donnees.mat;
% 
% lambda=materiau.lambda;
% mu=materiau.mu;
% 
% longueur=geometrie.longueur;
% hauteur=geometrie.hauteur;

ER = 0 ;

% Extraction des données

% x_haut = calcul.x_haut;
% x_gauche1 = calcul.x_gauche1;
% x_gauche2 = calcul.x_gauche2;
% x_droite1 = calcul.x_droite1;
% x_droite2 = calcul.x_droite2;
% 
% y_haut = calcul.y_haut;
% y_gauche1 = calcul.y_gauche1;
% y_gauche2 = calcul.y_gauche2;
% y_droite1 = calcul.y_droite1;
% y_droite2 = calcul.y_droite2;
% 
% sigmaxx_haut = calcul.sigmaxx_haut;
% sigmaxx_bas = calcul.sigmaxx_bas;
% sigmaxx_gauche1 = calcul.sigmaxx_gauche1;
% sigmaxx_gauche2 = calcul.sigmaxx_gauche2;
% sigmaxx_droite1 = calcul.sigmaxx_droite1;
% sigmaxx_droite2 = calcul.sigmaxx_droite2;
% 
% sigmaxy_haut = calcul.sigmaxy_haut;
% sigmaxy_bas = calcul.sigmaxx_bas;
% sigmaxy_gauche1 = calcul.sigmaxy_gauche1;
% sigmaxy_gauche2 = calcul.sigmaxy_gauche2;
% sigmaxy_droite1 = calcul.sigmaxy_droite1;
% sigmaxy_droite2 = calcul.sigmaxy_droite2;
% 
% sigmayy_haut = calcul.sigmayy_haut;
% sigmayy_bas = calcul.sigmayy_bas;
% sigmayy_gauche1 = calcul.sigmayy_gauche1;
% sigmayy_gauche2 = calcul.sigmayy_gauche2;
% sigmayy_droite1 = calcul.sigmayy_droite1;
% sigmayy_droite2 = calcul.sigmayy_droite2;



lx=size(x_haut,1);
% lyg1=size(x_gauche1,1);
% lyg2=size(x_gauche2,1);
lyd1=size(x_droite1,1);
lyd2=size(x_droite2,1);

x_bas=x_haut;
x_bas(:,2)=x_bas(:,2)*0;

y_bas=y_haut;
y_bas(:,2)=y_bas(:,2)*0;



% initialisation du champ virtuel

v_x_haut=x_haut;
v_x_haut(:,2)=0*v_x_haut(:,2);

v_x_bas=v_x_haut;

v_x_gauche1=x_gauche1;
v_x_gauche1(:,2)=0*v_x_gauche1(:,2);

v_x_gauche2=x_gauche2;
v_x_gauche2(:,2)=0*v_x_gauche2(:,2);

v_x_droite1=x_droite1;
v_x_droite1(:,2)=0*v_x_droite1(:,2);

v_x_droite2=x_droite2;
v_x_droite2(:,2)=0*v_x_droite2(:,2);



v_y_haut=y_haut;
v_y_haut(:,2)=0*v_y_haut(:,2);

v_y_bas=v_y_haut;

v_y_gauche1=y_gauche1;
v_y_gauche1(:,2)=0*v_y_gauche1(:,2);

v_y_gauche2=y_gauche2;
v_y_gauche2(:,2)=0*v_y_gauche2(:,2);

v_y_droite1=y_droite1;
v_y_droite1(:,2)=0*v_y_droite1(:,2);

v_y_droite2=y_droite2;
v_y_droite2(:,2)=0*v_y_droite2(:,2);



v_sigmaxx_haut=sigmaxx_haut;
v_sigmaxx_haut(:,2)=0*v_sigmaxx_haut(:,2);

v_sigmaxx_bas=v_sigmaxx_haut;

v_sigmaxx_gauche1=sigmaxx_gauche1;
v_sigmaxx_gauche1(:,2)=0*v_sigmaxx_gauche1(:,2);

v_sigmaxx_gauche2=sigmaxx_gauche2;
v_sigmaxx_gauche2(:,2)=0*v_sigmaxx_gauche2(:,2);

v_sigmaxx_droite1=sigmaxx_droite1;
v_sigmaxx_droite1(:,2)=0*v_sigmaxx_droite1(:,2);

v_sigmaxx_droite2=sigmaxx_droite2;
v_sigmaxx_droite2(:,2)=0*v_sigmaxx_droite2(:,2);



v_sigmayy_haut=sigmayy_haut;
v_sigmayy_haut(:,2)=0*v_sigmayy_haut(:,2);

v_sigmayy_bas=v_sigmayy_haut;

v_sigmayy_gauche1=sigmayy_gauche1;
v_sigmayy_gauche1(:,2)=0*v_sigmayy_gauche1(:,2);

v_sigmayy_gauche2=sigmayy_gauche2;
v_sigmayy_gauche2(:,2)=0*v_sigmayy_gauche2(:,2);

v_sigmayy_droite1=sigmayy_droite1;
v_sigmayy_droite1(:,2)=0*v_sigmayy_droite1(:,2);

v_sigmayy_droite2=sigmayy_droite2;
v_sigmayy_droite2(:,2)=0*v_sigmayy_droite2(:,2);



v_sigmaxy_haut=sigmaxy_haut;
v_sigmaxy_haut(:,2)=0*v_sigmaxy_haut(:,2);

v_sigmaxy_bas=v_sigmaxy_haut;

v_sigmaxy_gauche1=sigmaxy_gauche1;
v_sigmaxy_gauche1(:,2)=0*v_sigmaxy_gauche1(:,2);

v_sigmaxy_gauche2=sigmaxy_gauche2;
v_sigmaxy_gauche2(:,2)=0*v_sigmaxy_gauche2(:,2);

v_sigmaxy_droite1=sigmaxy_droite1;
v_sigmaxy_droite1(:,2)=0*v_sigmaxy_droite1(:,2);

v_sigmaxy_droite2=sigmaxy_droite2;
v_sigmaxy_droite2(:,2)=0*v_sigmaxy_droite2(:,2);




% valeurs du champ virtuel en fonction du cas


if strcmp(champ,'x') 

    v_x_haut(:,2) = v_x_haut(:,1);
    
    v_x_bas = v_x_haut;
    
    v_x_droite1(:,2) = ones(lyd1,1)*longueur;
    v_x_droite2(:,2) = ones(lyd2,1)*longueur;
    
    % tous les v_y sont nuls
    
    v_sigmaxx_haut(:,2) = lambda+2*mu ;
    v_sigmayy_haut(:,2) = lambda ;
    
    v_sigmaxx_bas(:,2) = -(lambda+2*mu) ;
    v_sigmayy_bas(:,2) = -lambda ;
    
    v_sigmaxx_gauche1(:,2) = -(lambda+2*mu)  ;
    v_sigmayy_gauche1(:,2) = -lambda  ;
    
    v_sigmaxx_gauche2(:,2) = -(lambda+2*mu)  ;
    v_sigmayy_gauche2(:,2) = -lambda  ;
    
    v_sigmaxx_droite1(:,2) = lambda+2*mu  ;
    v_sigmayy_droite1(:,2) = lambda  ;
    
    v_sigmaxx_droite2(:,2) = lambda+2*mu   ;
    v_sigmayy_droite2(:,2) = lambda   ;
    
   
end


if strcmp(champ,'y') 

    v_y_haut(:,2) = ones(lx,1)*hauteur;
    
    v_y_droite1(:,2) = v_y_droite1(:,1);
    v_y_droite2(:,2) = v_y_droite2(:,1);
    
    v_y_gauche1(:,2) = v_y_gauche1(:,1);
    v_y_gauche2(:,2) = v_y_gauche2(:,1);
    
    
    
    v_sigmaxx_haut(:,2) = lambda ;
    v_sigmayy_haut(:,2) = lambda+2*mu ;
    
    v_sigmaxx_bas(:,2) = -lambda ;
    v_sigmayy_bas(:,2) = -(lambda+2*mu) ;
    
    v_sigmaxx_gauche1(:,2) = -lambda   ;
    v_sigmayy_gauche1(:,2) = -(lambda+2*mu)   ;
    
    v_sigmaxx_gauche2(:,2) = -lambda   ;
    v_sigmayy_gauche2(:,2) = -(lambda+2*mu)   ;
    
    v_sigmaxx_droite1(:,2) = lambda   ;
    v_sigmayy_droite1(:,2) = lambda+2*mu   ;
    
    v_sigmaxx_droite2(:,2) = lambda   ;
    v_sigmayy_droite2(:,2) = lambda+2*mu   ;
    
end


if strcmp(champ,'xy') 
    
    v_y_haut(:,2) = v_y_haut(:,1) ;
    v_y_bas(:,2) = v_y_bas(:,1) ;
    v_y_droite1(:,2) = ones(lyd1,1)*longueur ;
    v_y_droite2(:,2) = ones(lyd2,1)*longueur ;
    
    v_sigmaxy_haut(:,2) = v_sigmaxy_haut(:,1)*mu ;
    v_sigmaxy_bas(:,2) = -v_sigmaxy_bas(:,1)*mu ;
    v_sigmaxy_droite1(:,2) = ones(lyd1,1)*longueur*mu  ;
    v_sigmaxy_droite2(:,2) = ones(lyd2,1)*longueur*mu  ;

end


% Champs de Andrieux


if strcmp(champ,'Andrieux_11') 

    a=(1-nu^2)/E;
    b=-(nu*(1+nu))/E;
    
    
    v_x_haut(:,2) = a*v_x_haut(:,1);
    
    v_x_bas = v_x_haut;
    
    v_x_droite1(:,2) = a*ones(lyd1,1)*longueur;
    v_x_droite2(:,2) = a*ones(lyd2,1)*longueur;
    
    
    v_y_haut(:,2) = b*ones(lx,1)*hauteur;
    
    v_y_droite1(:,2) = b*v_y_droite1(:,1);
    v_y_droite2(:,2) = b*v_y_droite2(:,1);
    
    v_y_gauche1(:,2) = b*v_y_gauche1(:,1);
    v_y_gauche2(:,2) = b*v_y_gauche2(:,1);
    
    
    v_sigmaxx_haut(:,2) = 1 ;
    
    v_sigmaxx_bas(:,2) = -1 ;  %%
    
    v_sigmaxx_gauche1(:,2) = -1 ;  %%
    
    v_sigmaxx_gauche2(:,2) = -1  ;  %%
    
    v_sigmaxx_droite1(:,2) = 1  ;
    
    v_sigmaxx_droite2(:,2) = 1   ;
    
    
   
end



if strcmp(champ,'Andrieux_22') 
    
    a=(1-nu^2)/E;
    b=-(nu*(1+nu))/E;
    
    
    v_x_haut(:,2) = b*v_x_haut(:,1);
    
    v_x_bas = v_x_haut;
    
    v_x_droite1(:,2) = b*ones(lyd1,1)*longueur;
    v_x_droite2(:,2) = b*ones(lyd2,1)*longueur;
    
    
    v_y_haut(:,2) = a*ones(lx,1)*hauteur;
    
    v_y_droite1(:,2) = a*v_y_droite1(:,1);
    v_y_droite2(:,2) = a*v_y_droite2(:,1);
    
    v_y_gauche1(:,2) = a*v_y_gauche1(:,1);
    v_y_gauche2(:,2) = a*v_y_gauche2(:,1);
    
    
    v_sigmayy_haut(:,2) = 1 ;
    
    v_sigmayy_bas(:,2) = -1 ;  %%
    
    v_sigmayy_gauche1(:,2) = -1 ;  %%
    
    v_sigmayy_gauche2(:,2) = -1  ;  %%
    
    v_sigmayy_droite1(:,2) = 1  ;
    
    v_sigmayy_droite2(:,2) = 1   ;
    
   
end



if strcmp(champ,'Andrieux_12') 
    
    
    c=(1+nu)/E;

    
    v_x_haut(:,2) = c*ones(lx,1)*hauteur;
    
    v_x_droite1(:,2) = c*v_x_droite1(:,1);
    v_x_droite2(:,2) = c*v_x_droite2(:,1);
    
    v_x_gauche1(:,2) = c*v_y_gauche1(:,1);
    v_x_gauche2(:,2) = c*v_y_gauche2(:,1);
    
    v_y_haut(:,2) = c*v_y_haut(:,1);
    
    v_y_bas(:,2) = c*v_y_bas(:,1);
    
    v_y_droite1(:,2) = c*ones(lyd1,1)*longueur;
    v_y_droite2(:,2) = c*ones(lyd2,1)*longueur;
    
    
    
    v_sigmaxy_haut(:,2) = 1 ;
    
    v_sigmaxy_bas(:,2) = -1 ;  %%
    
    v_sigmaxy_gauche1(:,2) = -1 ;  %%
    
    v_sigmaxy_gauche2(:,2) = -1  ;  %%
    
    v_sigmaxy_droite1(:,2) = 1  ;
    
    v_sigmaxy_droite2(:,2) = 1   ;
    
   
end



    
% haut

ER = ER + ER_partiel(x_haut,sigmaxy_haut,v_x_haut,v_sigmaxy_haut);
ER = ER + ER_partiel(y_haut,sigmayy_haut,v_y_haut,v_sigmayy_haut);

% bas

ER = ER + ER_partiel(x_bas,sigmaxy_bas,v_x_bas,v_sigmaxy_bas);
ER = ER + ER_partiel(y_bas,sigmayy_bas,v_y_bas,v_sigmayy_bas);

% droite1

ER = ER + ER_partiel(x_droite1,sigmaxx_droite1,v_x_droite1,v_sigmaxx_droite1);
ER = ER + ER_partiel(y_droite1,sigmaxy_droite1,v_y_droite1,v_sigmaxy_droite1);

% droite2

ER = ER + ER_partiel(x_droite2,sigmaxx_droite2,v_x_droite2,v_sigmaxx_droite2);
ER = ER + ER_partiel(y_droite2,sigmaxy_droite2,v_y_droite2,v_sigmaxy_droite2);

% gauche1

ER = ER + ER_partiel(x_gauche1,sigmaxx_gauche1,v_x_gauche1,v_sigmaxx_gauche1);
ER = ER + ER_partiel(y_gauche1,sigmaxy_gauche1,v_y_gauche1,v_sigmaxy_gauche1);

% gauche2

ER = ER + ER_partiel(x_gauche2,sigmaxx_gauche2,v_x_gauche2,v_sigmaxx_gauche2);
ER = ER + ER_partiel(y_gauche2,sigmaxy_gauche2,v_y_gauche2,v_sigmaxy_gauche2);


end